%token constante id if while for INFEG SUPEG DIFF false float ETL OUL true false
%%
prog    :   "main" '(' ')' bloc
bloc    :   '{' decls listeinst '}'
decls   :   decls type ids ';'
       |    

ids     :   ids ',' idp | idp
idp : pointeur id
type    :   'int'
        |    'bool'
        |    'float'
listeinst : inst 
        |    listeinst inst
inst    :   bloc	
        |    inst_expression
        |    if '(' expl ')' inst suiteif 
        |    for '(' idp '=' exp ';' expl ';'inst ')'  inst 
        |    while '(' expl ')' inst	
        |    'read' idp
        |    'printf' idp
suiteif :   'else' inst 
        |    

inst_expression : exp '=' exp ';'
        | exp ';'

exp     :   idp
        |    '&' idp
        |    '(' exp ')'
        |    constante
        |    exp op exp

pointeur: '*' pointeur
        |  

op      : 	'+' | '-' | '*' | '/'
expl    :   '(' expl ')'
        |    constbool
        |    expl opl expl
        |    exp oprel exp
opl     :   ETL | OUL
oprel   :   '>' | '<' | INFEG|SUPEG | '=' | DIFF
constbool : true | false
